home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 23 / CU Amiga - Super CD-ROM 23 (June 1998).iso / CreatingGames / Utilities / Asm / AB3DIIsrc / source_4000 / MultiAlienControl.s < prev    next >
Encoding:
Text File  |  1996-07-28  |  23.0 KB  |  1,638 lines

  1.  
  2. gotgun: dc.w 0
  3.  
  4. ANIMPOINTER: dc.l 0
  5.  
  6. ASKFORPROT:
  7.  include "ab3:source_4000/askforprot.s"
  8.  
  9. ALIENBRIGHT: dc.w 0
  10.  
  11. ItsAnAlien:
  12.  
  13.  tst.b NASTY
  14.  beq.s .NONASIES
  15.  
  16.  move.l #32*256,StepUpVal
  17.  move.l #32*256,StepDownVal
  18.  
  19. ; move.l #4,deadframe
  20. ; move.w #0,screamsound
  21. ; move.w #160,nasheight
  22.  
  23.  move.w 12(a0),GraphicRoom(a0)
  24.  move.w 12(a0),d2
  25.  bge.s .okalive
  26.  
  27.  
  28.  rts
  29.  
  30.  
  31. .NONASIES:
  32.  move.w #-1,12(a0)
  33.  rts
  34.  
  35. .okalive:
  36.  
  37.  move.l ZoneAdds,a5
  38.  move.l (a5,d2.w*4),d0
  39.  add.l LEVELDATA,d0
  40.  move.l d0,objroom
  41.  
  42.  move.l d0,a6
  43.  move.b ToEcho(a6),ALIENECHO
  44.  
  45.  moveq #0,d0
  46.  move.l LINKFILE,a6
  47.  move.l a6,a5
  48.  move.b TypeOfThing(a0),d0
  49.  add.l #AlienBrights,a5
  50.  move.w (a5,d0.w*2),d1
  51.  neg.w d1
  52.  move.w d1,ALIENBRIGHT
  53.  muls #A_AnimLen,d0
  54.  add.l #AlienAnimData,a6
  55.  add.l d0,a6
  56.  
  57.  move.l a6,ANIMPOINTER
  58.  
  59.  move.l LINKFILE,a1
  60.  move.l a1,a2
  61.  add.l #AlienShotOffsets,a2
  62.  
  63.  lea AlienStats(a1),a1
  64.  moveq #0,d0
  65.  move.b TypeOfThing(a0),d0
  66.  
  67.  move.l (a2,d0.w*8),d1
  68.  asl.l #7,d1
  69.  move.l d1,SHOTYOFF
  70.  move.w 6(a2,d0.w*8),d1
  71.  neg.w d1
  72.  asl.w #2,d1
  73.  move.w d1,SHOTOFFMULT
  74.  
  75.  muls #AlienStatLen,d0
  76.  add.w d0,a1 ; ptr to alien stats
  77.  
  78.  move.w A_Height(a1),d0
  79.  ext.l d0
  80.  asl.l #7,d0
  81.  move.l d0,thingheight
  82.  
  83.  move.w A_Auxilliary(a1),AUXOBJ
  84.  
  85.  move.w (a0),CollId
  86.  
  87.  move.b 1(a1),VECOBJ
  88.  move.w A_ReactionTime(a1),REACTIONTIME
  89.  move.w A_DefBeh(a1),DEFAULTMODE
  90.  move.w A_ResBeh(a1),RESPONSEMODE
  91.  move.w A_RetBeh(a1),RETREATMODE
  92.  move.w A_FolBeh(a1),FOLLOWUPMODE
  93.  move.w A_DefSpeed(a1),prowlspeed
  94.  move.w A_ResSpeed(a1),responsespeed
  95.  move.w A_RetSpeed(a1),retreatspeed
  96.  move.w A_FolSpeed(a1),followupspeed
  97.  move.w A_FolTimeout(a1),FOLLOWUPTIMER
  98.  move.w A_WallCollDist(a1),d0
  99.  move.b diststowall+1(pc,d0.w*4),awayfromwall
  100.  move.w diststowall+2(pc,d0.w*4),extlen
  101.   
  102.  jsr AIROUTINE
  103.  
  104.  rts
  105.  
  106. ALIENECHO: dc.w 0
  107.  
  108. diststowall:
  109.  dc.w 0,40
  110.  dc.w 1,80
  111.  dc.w 2,160
  112.  
  113. ItsAnObject:
  114.  
  115.  move.l LINKFILE,a1
  116.  lea ObjectStats(a1),a1
  117.  moveq #0,d0
  118.  move.b TypeOfThing(a0),d0
  119.  muls #ObjectStatLen,d0
  120.  add.w d0,a1 ; pointer to obj stats.
  121.  
  122.  move.l a1,StatPointer
  123.  
  124.  move.w (a1),d0
  125.  cmp.w #1,d0
  126.  blt Collectable
  127.  beq Activatable
  128.  cmp.w #3,d0
  129.  blt Destructable
  130.  beq Decoration
  131.  
  132.  rts
  133.  
  134. GUNHELD:
  135.  
  136. ; This is a player gun in his hand.
  137.  
  138.  move.l a1,a2
  139.  jsr ACTANIMOBJ
  140.  
  141.  rts
  142.  
  143. Collectable:
  144.  
  145.  move.w 12(a0),d0
  146.  bge.s .okinroom
  147.  rts
  148. .okinroom
  149.  
  150.  tst.b WhichAnim(a0)
  151.  bne.s GUNHELD
  152.  
  153.  move.w d0,GraphicRoom(a0)
  154.  
  155.  tst.b NASTY
  156.  beq.s .nolocks
  157.  move.l DoorsHeld(a0),d1
  158.  or.l d1,DoorLocks
  159. .nolocks:
  160.  tst.b worry(a0)
  161.  bne.s .worryaboot
  162.  rts
  163. .worryaboot:
  164.  
  165.  and.b #$80,worry(a0)
  166.  move.l a1,a2
  167.  
  168.  move.l ZoneAdds,a1
  169.  move.l (a1,d0.w*4),a1
  170.  add.l LEVELDATA,a1
  171.  
  172.  tst.w O_FloorCeiling(a2)
  173.  beq.s .onfloor
  174.  move.l ToZoneRoof(a1),d0
  175.  tst.b ObjInTop(a0)
  176.  beq.s .okinbotc
  177.  move.l ToUpperRoof(a1),d0
  178. .okinbotc:
  179.  
  180.  bra.s .onceiling
  181.  
  182. .onfloor
  183.  move.l ToZoneFloor(a1),d0
  184.  tst.b ObjInTop(a0)
  185.  beq.s .okinbot
  186.  move.l ToUpperFloor(a1),d0
  187. .okinbot:
  188. .onceiling
  189.  
  190.  asr.l #7,d0
  191.  move.w d0,4(a0)
  192.  
  193.  bsr DEFANIMOBJ
  194.  
  195.  bsr CHECKNEARBYONE
  196.  tst.b d0
  197.  beq.s .NotCollected1
  198.  
  199.  bsr PLR1CollectObject
  200.  move.w #-1,12(a0)
  201.  clr.b worry(a0)
  202.  
  203. .NotCollected1
  204.  
  205.  cmp.b #'n',mors
  206.  beq.s .NotCollected2
  207.  bsr CHECKNEARBYTWO
  208.  tst.b d0
  209.  beq.s .NotCollected2
  210.  
  211.  bsr PLR2CollectObject
  212.  move.w #-1,12(a0)
  213.  clr.b worry(a0)
  214.  
  215. .NotCollected2
  216.  
  217.  
  218.  rts
  219.  
  220. Activatable:
  221.  
  222.  move.w 12(a0),d0
  223.  bge.s .okinroom
  224.  rts
  225. .okinroom
  226.  
  227.  tst.b WhichAnim(a0)
  228.  bne ACTIVATED
  229.  
  230.  move.w d0,GraphicRoom(a0)
  231.  tst.b NASTY
  232.  beq.s .nolocks
  233.  move.l DoorsHeld(a0),d1
  234.  or.l d1,DoorLocks
  235. .nolocks
  236.  tst.b worry(a0)
  237.  bne.s .worryaboot
  238.  rts
  239. .worryaboot:
  240.  
  241.  and.b #$80,worry(a0)
  242.  move.l a1,a2
  243.  
  244.  move.l ZoneAdds,a1
  245.  move.l (a1,d0.w*4),a1
  246.  add.l LEVELDATA,a1
  247.  
  248.  tst.w O_FloorCeiling(a2)
  249.  beq.s .onfloor
  250.  move.l ToZoneRoof(a1),d0
  251.  tst.b ObjInTop(a0)
  252.  beq.s .okinbotc
  253.  move.l ToUpperRoof(a1),d0
  254. .okinbotc:
  255.  
  256.  bra.s .onceiling
  257.  
  258. .onfloor
  259.  move.l ToZoneFloor(a1),d0
  260.  tst.b ObjInTop(a0)
  261.  beq.s .okinbot
  262.  move.l ToUpperFloor(a1),d0
  263. .okinbot:
  264. .onceiling
  265.  
  266.  asr.l #7,d0
  267.  move.w d0,4(a0)
  268.  
  269.  bsr DEFANIMOBJ
  270.  
  271.  bsr CHECKNEARBYONE
  272.  tst.b d0
  273.  beq.s .NotActivated1
  274.  
  275.  tst.b p1_spctap
  276.  beq.s .NotActivated1
  277.  
  278. ; The player has pressed the spacebar
  279. ; within range of the object.
  280.  
  281.  bsr PLR1CollectObject
  282.  
  283.  
  284.  move.w #0,ObjTimer(a0)
  285.  st WhichAnim(a0)
  286.  move.w #0,SecTimer(a0)
  287.  rts
  288.  
  289. .NotActivated1:
  290.  
  291.  
  292.  cmp.b #'n',mors
  293.  beq .NotActivated2
  294.  bsr CHECKNEARBYTWO
  295.  tst.b d0
  296.  beq.s .NotActivated2
  297.  
  298.  tst.b p2_spctap
  299.  beq.s .NotActivated2
  300.  
  301. ; The player has pressed the spacebar
  302. ; within range of the object.
  303.  bsr PLR2CollectObject
  304.  
  305.  
  306.  move.w #0,ObjTimer(a0)
  307.  st WhichAnim(a0)
  308.  move.w #0,SecTimer(a0)
  309.  rts
  310.  
  311. .NotActivated2:
  312.  
  313.  rts
  314.  
  315. ACTIVATED:
  316.  
  317.  move.w d0,GraphicRoom(a0)
  318. ; move.l DoorsHeld(a0),d1
  319. ; or.l d1,DoorLocks
  320.  tst.b worry(a0)
  321.  bne.s .worryaboot
  322.  rts
  323. .worryaboot:
  324.  
  325.  and.b #$80,worry(a0)
  326.  move.l a1,a2
  327.  
  328.  move.l ZoneAdds,a1
  329.  move.l (a1,d0.w*4),a1
  330.  add.l LEVELDATA,a1
  331.  
  332.  tst.w O_FloorCeiling(a2)
  333.  beq.s .onfloor
  334.  move.l ToZoneRoof(a1),d0
  335.  tst.b ObjInTop(a0)
  336.  beq.s .okinbotc
  337.  move.l ToUpperRoof(a1),d0
  338. .okinbotc:
  339.  
  340.  bra.s .onceiling
  341.  
  342. .onfloor
  343.  move.l ToZoneFloor(a1),d0
  344.  tst.b ObjInTop(a0)
  345.  beq.s .okinbot
  346.  move.l ToUpperFloor(a1),d0
  347. .okinbot:
  348. .onceiling
  349.  
  350.  asr.l #7,d0
  351.  move.w d0,4(a0)
  352.  
  353.  bsr ACTANIMOBJ
  354.  
  355.  move.w TempFrames,d0
  356.  add.w d0,SecTimer(a0)
  357.  move.w O_ActiveTimeout(a2),d0
  358.  blt.s .nottimeout
  359.  
  360.  cmp.w SecTimer(a0),d0
  361.  ble.s .DEACTIVATE
  362.  
  363. .nottimeout:
  364.  
  365.  bsr CHECKNEARBYONE
  366.  tst.b d0
  367.  beq.s .NotDeactivated1
  368.  
  369.  tst.b p1_spctap
  370.  beq.s .NotDeactivated1
  371.  
  372. ; The player has pressed the spacebar
  373. ; within range of the object.
  374.  
  375. .DEACTIVATE:
  376.  
  377.  move.w #0,ObjTimer(a0)
  378.  clr.b WhichAnim(a0)
  379.  rts
  380.  
  381. .NotDeactivated1:
  382.  
  383.  cmp.b #'n',mors
  384.  beq.s .NotDeactivated2
  385.  
  386.  bsr CHECKNEARBYTWO
  387.  tst.b d0
  388.  beq.s .NotDeactivated2
  389.  
  390.  tst.b p2_spctap
  391.  beq.s .NotDeactivated2
  392.  
  393. ; The player has pressed the spacebar
  394. ; within range of the object.
  395.  
  396.  move.w #0,ObjTimer(a0)
  397.  clr.b WhichAnim(a0)
  398.  rts
  399.  
  400. .NotDeactivated2:
  401.  
  402.  rts
  403.  
  404. Destructable:
  405.  
  406.  move.l LINKFILE,a3
  407.  add.l #ObjectStats,a3
  408.  moveq #0,d0
  409.  move.b TypeOfThing(a0),d0
  410.  muls #ObjectStatLen,d0
  411.  add.l d0,a3
  412.  
  413.  moveq #0,d0
  414.  move.b damagetaken(a0),d0
  415.  cmp.w O_HitPoints(a3),d0
  416.  blt StillHere
  417.  
  418.  tst.b numlives(a0)
  419.  beq.s .alreadydead
  420.  
  421.  cmp.b #'n',mors
  422.  bne.s .notext
  423.  
  424.  move.w TextToShow(a0),d0
  425.  blt.s .notext
  426.  
  427.  muls #160,d0
  428.  add.l LEVELDATA,d0
  429.  jsr SENDMESSAGE
  430. ; move.w #0,SCROLLXPOS
  431. ; move.l d0,SCROLLPOINTER
  432. ; add.l #160,d0
  433. ; move.l d0,ENDSCROLL
  434. ; move.w #40,SCROLLTIMER
  435.  
  436. .notext:
  437.  
  438.  move.w #0,ObjTimer(a0)
  439.  
  440. .alreadydead
  441.  
  442.  move.b #0,numlives(a0)
  443.  
  444.  move.w 12(a0),d0
  445.  bge.s .okinroom
  446.  rts
  447. .okinroom
  448.  
  449.  tst.b worry(a0)
  450.  bne.s .worryaboot
  451.  rts
  452. .worryaboot:
  453.  
  454.  move.l a1,a2
  455.  
  456.  move.l ZoneAdds,a1
  457.  move.l (a1,d0.w*4),a1
  458.  add.l LEVELDATA,a1
  459.  
  460.  tst.w O_FloorCeiling(a2)
  461.  beq.s .onfloor
  462.  move.l ToZoneRoof(a1),d0
  463.  tst.b ObjInTop(a0)
  464.  beq.s .okinbotc
  465.  move.l ToUpperRoof(a1),d0
  466. .okinbotc:
  467.  
  468.  bra.s .onceiling
  469.  
  470. .onfloor
  471.  move.l ToZoneFloor(a1),d0
  472.  tst.b ObjInTop(a0)
  473.  beq.s .okinbot
  474.  move.l ToUpperFloor(a1),d0
  475. .okinbot:
  476. .onceiling
  477.  
  478.  asr.l #7,d0
  479.  move.w d0,4(a0)
  480.  
  481.  bsr ACTANIMOBJ
  482.  
  483.  rts
  484.  
  485. StillHere:
  486.  move.w 12(a0),d0
  487.  bge.s .okinroom
  488.  rts
  489. .okinroom
  490.  move.b #1,numlives(a0)
  491.  
  492.  tst.b NASTY
  493.  beq.s .nolocks
  494.  move.l DoorsHeld(a0),d1
  495.  or.l d1,DoorLocks
  496. .nolocks
  497.  
  498.  tst.b worry(a0)
  499.  bne.s .worryaboot
  500.  rts
  501. .worryaboot:
  502.  
  503.  movem.l d0-d7/a0-a6,-(a7)
  504.  
  505.  move.w 12(a0),d2
  506.  move.l ZoneAdds,a5
  507.  move.l (a5,d2.w*4),d0
  508.  add.l LEVELDATA,d0
  509.  move.l d0,objroom
  510.  
  511.  move.w (a0),d0
  512.  move.l ObjectPoints,a1
  513.  move.w (a1,d0.w*8),newx
  514.  move.w 4(a1,d0.w*8),newz
  515.  
  516.  jsr LOOKFORPLAYER1
  517.  movem.l (a7)+,d0-d7/a0-a6
  518.  
  519. Decoration
  520.  
  521.  move.w 12(a0),d0
  522.  bge.s .okinroom
  523.  rts
  524. .okinroom
  525.  
  526.  tst.b worry(a0)
  527.  bne.s .worryaboot
  528.  rts
  529. .worryaboot:
  530.  
  531.  
  532. intodeco:
  533.  move.l a1,a2
  534.  
  535.  move.l ZoneAdds,a1
  536.  move.l (a1,d0.w*4),a1
  537.  add.l LEVELDATA,a1
  538.  
  539.  tst.w O_FloorCeiling(a2)
  540.  beq.s .onfloor
  541.  move.l ToZoneRoof(a1),d0
  542.  tst.b ObjInTop(a0)
  543.  beq.s .okinbotc
  544.  move.l ToUpperRoof(a1),d0
  545. .okinbotc:
  546.  
  547.  bra.s .onceiling
  548.  
  549. .onfloor
  550.  move.l ToZoneFloor(a1),d0
  551.  tst.b ObjInTop(a0)
  552.  beq.s .okinbot
  553.  move.l ToUpperFloor(a1),d0
  554. .okinbot:
  555. .onceiling
  556.  
  557.  asr.l #7,d0
  558.  move.w d0,4(a0)
  559.  
  560.  bsr DEFANIMOBJ
  561.  
  562.  rts
  563.  
  564. PLR1CollectObject:
  565.  
  566.  cmp.b #'n',mors
  567.  bne.s .nodeftext
  568.  
  569.  move.w TextToShow(a0),d0
  570.  blt.s .notext
  571.  
  572.  muls #160,d0
  573.  add.l LEVELDATA,d0
  574.  jsr SENDMESSAGE
  575. ; move.w #0,SCROLLXPOS
  576. ; move.l d0,SCROLLPOINTER
  577. ; add.l #160,d0
  578. ; move.l d0,ENDSCROLL
  579. ; move.w #40,SCROLLTIMER
  580.  
  581.  bra .nodeftext
  582.  
  583. .notext:
  584.  
  585.  cmp.b #'s',mors
  586.  beq.s .nodeftext
  587.  
  588.  moveq #0,d2
  589.  move.b TypeOfThing(a0),d2
  590.  move.l LINKFILE,a4
  591.  add.l #ObjectNames,a4
  592.  muls #20,d2
  593.  add.l d2,a4
  594.  move.l #TEMPSCROLL,a2
  595.  move.w #19,d2
  596.  
  597. .copyname:
  598.  move.b (a4)+,d3
  599.  bne.s .oklet
  600.  move.b #32,d3
  601. .oklet:
  602.  move.b d3,(a2)+
  603.  
  604.  dbra d2,.copyname
  605.  
  606.  move.l #TEMPSCROLL,d0
  607.  jsr SENDMESSAGENORET
  608.  
  609. .nodeftext:
  610.  
  611.  move.l LINKFILE,a2
  612.  lea AmmoGive(a2),a3
  613.  add.l #GunGive,a2
  614.  moveq #0,d0
  615.  move.b TypeOfThing(a0),d0
  616.  move.w d0,d1
  617.  muls #AmmoGiveLen,d0
  618.  muls #GunGiveLen,d1
  619.  add.w d1,a2
  620.  add.w d0,a3
  621.  
  622. ; Check if player has max of all ammo types:
  623.  
  624.  bsr CHECKPLAYERGOT
  625.  tst.b d0
  626.  beq dontcollect
  627.  
  628.  move.w #21,d0
  629.  move.l #PLAYERONEHEALTH,a1
  630. GiveAmmo:
  631.  move.w (a3)+,d1
  632.  add.w d1,(a1)+
  633.  dbra d0,GiveAmmo
  634.  
  635.  move.w #11,d0
  636.  move.l #PLAYERONESHIELD,a1
  637. GiveGuns:
  638.  move.w (a2)+,d1
  639.  or.w d1,(a1)+
  640.  dbra d0,GiveGuns
  641.  
  642.  move.l LINKFILE,a3
  643.  add.l #ObjectStats,a3
  644.  moveq #0,d0
  645.  move.b TypeOfThing(a0),d0
  646.  muls #ObjectStatLen,d0
  647.  add.l d0,a3
  648.  
  649.  move.w O_SoundEffect(a3),d0
  650.  blt.s .nosoundmake
  651.  
  652.  movem.l d0-d7/a0-a6,-(a7)
  653.  move.w d0,Samplenum
  654.  clr.b notifplaying
  655.  move.w (a0),IDNUM
  656.  move.w #80,Noisevol
  657.  move.l #ObjRotated,a1
  658.  move.w (a0),d0
  659.  lea (a1,d0.w*8),a1
  660.  move.l (a1),Noisex
  661.  jsr MakeSomeNoise
  662.  movem.l (a7)+,d0-d7/a0-a6
  663. .nosoundmake
  664.  
  665.  
  666. dontcollect:
  667.  rts 
  668.  
  669. PLR2CollectObject:
  670.  
  671.  move.l LINKFILE,a2
  672.  lea AmmoGive(a2),a3
  673.  add.l #GunGive,a2
  674.  moveq #0,d0
  675.  move.b TypeOfThing(a0),d0
  676.  move.w d0,d1
  677.  muls #AmmoGiveLen,d0
  678.  muls #GunGiveLen,d1
  679.  add.w d1,a2
  680.  add.w d0,a3
  681.  
  682. ; Check if player has max of all ammo types:
  683.  
  684.  bsr CHECKPLAYERGOT
  685.  tst.b d0
  686.  beq dontcollect2
  687.  
  688.  move.w #21,d0
  689.  move.l #PLAYERTWOHEALTH,a1
  690. GiveAmmo2:
  691.  move.w (a3)+,d1
  692.  add.w d1,(a1)+
  693.  dbra d0,GiveAmmo2
  694.  
  695.  move.w #11,d0
  696.  move.l #PLAYERTWOSHIELD,a1
  697. GiveGuns2:
  698.  move.w (a2)+,d1
  699.  or.w d1,(a1)+
  700.  dbra d0,GiveGuns2
  701.  
  702.  move.l LINKFILE,a3
  703.  add.l #ObjectStats,a3
  704.  moveq #0,d0
  705.  move.b TypeOfThing(a0),d0
  706.  muls #ObjectStatLen,d0
  707.  add.l d0,a3
  708.  
  709.  move.w O_SoundEffect(a3),d0
  710.  blt.s .nosoundmake
  711.  
  712.  movem.l d0-d7/a0-a6,-(a7)
  713.  move.w d0,Samplenum
  714.  clr.b notifplaying
  715.  move.w (a0),IDNUM
  716.  move.w #80,Noisevol
  717.  move.l #ObjRotated,a1
  718.  move.w (a0),d0
  719.  lea (a1,d0.w*8),a1
  720.  move.l (a1),Noisex
  721.  move.b #0,Echo
  722.  jsr MakeSomeNoise
  723.  movem.l (a7)+,d0-d7/a0-a6
  724. .nosoundmake
  725.  
  726.  move.w #-1,12(a0)
  727.  clr.b worry(a0)
  728.  
  729. dontcollect2:
  730.  rts 
  731.  
  732. PLAYERONEHEALTH:
  733.   dc.w 0
  734. PLAYERONEFUEL:
  735.   dc.w 0
  736. PLAYERONEAMMO:
  737.  ds.w 20
  738.  
  739. PLAYERONESHIELD:
  740.  dc.w 0
  741. PLAYERONEJETPACK:
  742.  dc.w 0
  743. PLAYERONEGUNS:
  744.  dcb.w 10,0
  745.  
  746. PLAYERTWOHEALTH:
  747.   dc.w 0
  748. PLAYERTWOFUEL:
  749.   dc.w 0
  750. PLAYERTWOAMMO:
  751.  ds.w 20
  752.  
  753. PLAYERTWOSHIELD:
  754.  dc.w 0
  755. PLAYERTWOJETPACK:
  756.  dc.w 0
  757. PLAYERTWOGUNS:
  758.  dcb.w 10,0
  759.  
  760. PLAYERTHREEHEALTH:
  761.   dc.w 0
  762. PLAYERTHREEFUEL:
  763.   dc.w 0
  764. PLAYERTHREEAMMO:
  765.  ds.w 20
  766.  
  767. PLAYERTHREESHIELD:
  768.  dc.w 0
  769. PLAYERTHREEJETPACK:
  770.  dc.w 0
  771. PLAYERTHREEGUNS:
  772.  dcb.w 10,0
  773.  
  774. CHECKPLAYERGOT:
  775.  move.b #1,d0
  776.  rts
  777.  
  778. PLAYERTHREENOISEVOL: dc.l 0
  779.  
  780. CHECKNEARBYONE:
  781.  
  782.  move.l StatPointer,a2
  783.  move.b PLR1_StoodInTop,d0
  784.  move.b ObjInTop(a0),d1
  785.  eor.b d0,d1
  786.  bne .NotSameZone
  787.  
  788.  move.w PLR1_xoff,oldx
  789.  move.w PLR1_zoff,oldz
  790.  move.w PLR1_Zone,d7
  791.  
  792.  cmp.w 12(a0),d7
  793.  bne .NotSameZone
  794.  
  795.  move.l PLR1_yoff,d7
  796.  move.l PLR1_height,d6
  797.  asr.l #1,d6
  798.  add.l d6,d7
  799.  asr.l #7,d7
  800.  sub.w 4(a0),d7
  801.  bgt.s .okpos
  802.  neg.w d7
  803. .okpos
  804.  
  805.  cmp.w O_ColBoxHeight(a2),d7
  806.  bgt .NotSameZone
  807.  
  808.  move.w (a0),d0
  809.  move.l ObjectPoints,a1
  810.  move.w (a1,d0.w*8),newx
  811.  move.w 4(a1,d0.w*8),newz
  812.  move.w O_ColBoxRad(a2),d2
  813.  muls d2,d2
  814.  jsr CheckHit
  815.  move.b hitwall,d0
  816.  rts
  817. .NotSameZone
  818.  moveq #0,d0
  819.  rts 
  820.  
  821. CHECKNEARBYTWO:
  822.  
  823.  move.l StatPointer,a2
  824.  move.b PLR2_StoodInTop,d0
  825.  move.b ObjInTop(a0),d1
  826.  eor.b d0,d1
  827.  bne .NotSameZone
  828.  
  829.  move.w PLR2_xoff,oldx
  830.  move.w PLR2_zoff,oldz
  831.  move.w PLR2_Zone,d7
  832.  
  833.  cmp.w 12(a0),d7
  834.  bne .NotSameZone
  835.  
  836.  move.l PLR2_yoff,d7
  837.  move.l PLR2_height,d6
  838.  asr.l #1,d6
  839.  add.l d6,d7
  840.  asr.l #7,d7
  841.  sub.w 4(a0),d7
  842.  bgt.s .okpos
  843.  neg.w d7
  844. .okpos
  845.  
  846.  cmp.w O_ColBoxHeight(a2),d7
  847.  bgt .NotSameZone
  848.  
  849.  move.w (a0),d0
  850.  move.l ObjectPoints,a1
  851.  move.w (a1,d0.w*8),newx
  852.  move.w 4(a1,d0.w*8),newz
  853.  move.w O_ColBoxRad(a2),d2
  854.  muls d2,d2
  855.  jsr CheckHit
  856.  move.b hitwall,d0
  857.  rts
  858. .NotSameZone
  859.  moveq #0,d0
  860.  rts 
  861.  
  862. StatPointer: dc.l 0
  863.  
  864. DEFANIMOBJ:
  865.  
  866.  move.l LINKFILE,a3
  867.  lea ObjectDefAnims(a3),a3
  868.  moveq #0,d0
  869.  move.b TypeOfThing(a0),d0
  870.  muls #O_AnimSize,d0
  871.  add.w d0,a3
  872.  move.w ObjTimer(a0),d0
  873.  
  874.  move.w d0,d1
  875.  add.w d0,d0
  876.  asl.w #2,d1
  877.  add.w d1,d0    ;*6
  878.  
  879.  cmp.w #1,O_GFXType(a2)
  880.  blt.s .bitmap
  881.  beq.s .vector
  882.  
  883. .glare:
  884.  move.l #0,8(a0)
  885.  move.b (a3,d0.w),d1
  886.  ext.w d1
  887.  neg.w d1
  888.  move.w d1,8(a0)
  889.  move.b 1(a3,d0.w),11(a0)
  890.  move.w 2(a3,d0.w),6(a0)
  891.  
  892.  move.b 4(a3,d0.w),d1 
  893.  ext.w d1
  894.  add.w d1,d1
  895.  add.w d1,4(a0)
  896.  
  897.  moveq #0,d1
  898.  move.b 5(a3,d0.w),d1
  899.  move.w d1,ObjTimer(a0)
  900.  rts
  901.  
  902. .vector:
  903.  
  904.  move.l #0,8(a0)
  905.  move.b (a3,d0.w),9(a0)
  906.  move.b 1(a3,d0.w),11(a0)
  907.  
  908.  move.w #$ffff,6(a0)
  909.  move.b 4(a3,d0.w),d1 
  910.  ext.w d1
  911.  add.w d1,d1
  912.  add.w d1,4(a0)
  913.  move.w 2(a3,d0.w),d1
  914.  add.w d1,Facing(a0)
  915.  
  916.  moveq #0,d1
  917.  move.b 5(a3,d0.w),d1
  918.  move.w d1,ObjTimer(a0)
  919.  
  920.  rts
  921.  
  922. .bitmap:
  923.  
  924.  move.l #0,8(a0)
  925.  move.b (a3,d0.w),9(a0)
  926.  move.b 1(a3,d0.w),11(a0)
  927.  move.w 2(a3,d0.w),6(a0)
  928.  move.b 4(a3,d0.w),d1 
  929.  ext.w d1
  930.  add.w d1,d1
  931.  add.w d1,4(a0)
  932.  
  933.  moveq #0,d1
  934.  move.b 5(a3,d0.w),d1
  935.  move.w d1,ObjTimer(a0)
  936.  
  937.  rts
  938.  
  939. ACTANIMOBJ:
  940.  
  941.  move.l LINKFILE,a3
  942.  lea ObjectActAnims(a3),a3
  943.  moveq #0,d0
  944.  move.b TypeOfThing(a0),d0
  945.  muls #O_AnimSize,d0
  946.  add.w d0,a3
  947.  move.w ObjTimer(a0),d0
  948.  
  949.  move.w d0,d1
  950.  add.w d0,d0
  951.  asl.w #2,d1
  952.  add.w d1,d0    ;*6
  953.  
  954.  cmp.w #1,O_GFXType(a2)
  955.  blt.s .bitmap
  956.  beq.s .vector
  957.  
  958. .glare:
  959.  move.l #0,8(a0)
  960.  move.b (a3,d0.w),d1
  961.  ext.w d1
  962.  neg.w d1
  963.  move.w d1,8(a0)
  964.  move.b 1(a3,d0.w),11(a0)
  965.  move.w 2(a3,d0.w),6(a0)
  966.  
  967.  move.b 4(a3,d0.w),d1 
  968.  ext.w d1
  969.  add.w d1,d1
  970.  add.w d1,4(a0)
  971.  
  972.  moveq #0,d1
  973.  move.b 5(a3,d0.w),d1
  974.  move.w d1,ObjTimer(a0)
  975.  
  976.  rts
  977.  
  978. .vector:
  979.  move.l #0,8(a0)
  980.  move.b (a3,d0.w),9(a0)
  981.  move.b 1(a3,d0.w),11(a0)
  982.  move.w #$ffff,6(a0)
  983.  move.b 4(a3,d0.w),d1 
  984.  ext.w d1
  985.  add.w d1,d1
  986.  add.w d1,4(a0)
  987.  
  988.  move.w 2(a3,d0.w),d1
  989.  add.w d1,Facing(a0)
  990.  
  991.  moveq #0,d1
  992.  move.b 5(a3,d0.w),d1
  993.  move.w d1,ObjTimer(a0)
  994.  
  995.  rts
  996.  
  997. .bitmap:
  998.  
  999.  move.l #0,8(a0)
  1000.  move.b (a3,d0.w),9(a0)
  1001.  move.b 1(a3,d0.w),11(a0)
  1002.  move.w 2(a3,d0.w),6(a0)
  1003.  move.b 4(a3,d0.w),d1 
  1004.  ext.w d1
  1005.  add.w d1,d1
  1006.  add.w d1,4(a0)
  1007.  
  1008.  moveq #0,d1
  1009.  move.b 5(a3,d0.w),d1
  1010.  move.w d1,ObjTimer(a0)
  1011.  
  1012.  rts
  1013.  
  1014.  
  1015. THISPLRxoff: dc.w 0
  1016. THISPLRzoff: dc.w 0
  1017.  
  1018. ViewpointToDraw:
  1019. ; Calculate which side to display:
  1020.  
  1021. ; move.l ObjectPoints,a1
  1022. ; move.w (a0),d1
  1023. ; lea (a1,d1.w*8),a1    ; ptr to points 
  1024.  
  1025. ; move.w (a1),oldx
  1026. ; move.w 4(a1),oldz
  1027. ; move.w THISPLRxoff,newx
  1028. ; move.w THISPLRzoff,newz
  1029. ; move.w #64,speed
  1030. ; move.w #-60,Range
  1031. ; movem.l a0/a1,-(a7)
  1032. ; jsr HeadTowards
  1033. ; movem.l (a7)+,a0/a1
  1034. ; move.w newx,d0
  1035. ; sub.w oldx,d0
  1036. ; move.w newz,d1
  1037. ; sub.w oldz,d1
  1038.  
  1039.  move.w Facing(a0),d3
  1040.  sub.w angpos,d3 
  1041.  
  1042. ; add.w #2048,d3
  1043.  and.w #8190,d3
  1044.  move.l #SineTable,a2
  1045.  move.w (a2,d3.w),d2
  1046.  adda.w #2048,a2
  1047.  move.w (a2,d3.w),d3
  1048.  
  1049. ; move.w d0,d4
  1050. ; move.w d1,d5
  1051. ; muls d3,d4
  1052. ; muls d2,d5
  1053. ; sub.l d5,d4
  1054. ; muls d3,d1
  1055. ; muls d2,d0
  1056. ; add.l d1,d0
  1057.  
  1058.  ext.l d2
  1059.  ext.l d3
  1060.  move.l d3,d0
  1061.  move.l d2,d4
  1062.  neg.l d0
  1063.  
  1064.  tst.l d0
  1065.  bgt.s FacingTowardsPlayer
  1066. FAP:
  1067.  tst.l d4
  1068.  bgt.s FAPR
  1069.  cmp.l d4,d0
  1070.  bgt.s LEFTFRAME
  1071.  bra.s AWAYFRAME
  1072.  
  1073. FAPR:
  1074.  neg.l d0
  1075.  cmp.l d0,d4
  1076.  bgt.s RIGHTFRAME
  1077.  bra.s AWAYFRAME
  1078.  
  1079. FacingTowardsPlayer
  1080.  
  1081.  tst.l d4
  1082.  bgt.s FTPR
  1083.  neg.l d4
  1084.  cmp.l d0,d4
  1085.  bgt.s LEFTFRAME
  1086.  bra.s TOWARDSFRAME
  1087.  
  1088. FTPR:
  1089.  cmp.l d0,d4
  1090.  bgt.s RIGHTFRAME
  1091. TOWARDSFRAME:
  1092.  move.l #0,d0
  1093.  rts
  1094. RIGHTFRAME:
  1095.  move.l #1,d0
  1096.  rts
  1097. LEFTFRAME:
  1098.  move.l #3,d0
  1099.  rts
  1100. AWAYFRAME:
  1101.  move.l #2,d0
  1102.  rts
  1103.  
  1104. deadframe: dc.l 0
  1105. screamsound: dc.w 0
  1106. nasheight: dc.w 0
  1107. tempcos: dc.w 0
  1108. tempsin: dc.w 0
  1109. tempx: dc.w 0
  1110. tempz: dc.w 0
  1111.  
  1112. RunAround:
  1113.  
  1114.  movem.l d0/d1/d2/d3/a0/a1,-(a7)
  1115.  
  1116.  move.w oldx,d0
  1117.  sub.w newx,d0    ; dx
  1118.  asr.w #1,d0
  1119.  move.w oldz,d1
  1120.  sub.w newz,d1    ; dz
  1121.  asr.w #1,d1
  1122.  
  1123.  move.l ObjectPoints,a1
  1124.  move.w (a0),d2
  1125.  lea (a1,d2.w*8),a1
  1126.  move.w (a1),d2
  1127.  sub.w tempx,d2
  1128.  move.w 4(a1),d3
  1129.  sub.w tempz,d3
  1130.  
  1131.  muls tempcos,d2
  1132.  muls tempsin,d3
  1133.  sub.l d3,d2
  1134.  
  1135.  blt.s headleft
  1136.  neg.w d0
  1137.  neg.w d1
  1138. headleft:
  1139.  sub.w d1,newx
  1140.  add.w d0,newz
  1141.  
  1142.  movem.l (a7)+,d0/d1/d2/d3/a0/a1
  1143.  rts
  1144.  
  1145. bbbb: dc.w 0
  1146. tsx: dc.w 0
  1147. tsz: dc.w 0
  1148. fsx: dc.w 0
  1149. fsz: dc.w 0
  1150.  
  1151. SHOOTPLAYER1
  1152.  
  1153.  
  1154.  move.w oldx,tsx
  1155.  move.w oldz,tsz
  1156.  move.w newx,fsx
  1157.  move.w newz,fsz
  1158.  
  1159.  move.w p1_xoff,newx
  1160.  move.w p1_zoff,newz
  1161.  move.w (a1),oldx
  1162.  move.w 4(a1),oldz
  1163.  
  1164.  move.w newx,d1
  1165.  sub.w oldx,d1
  1166.  move.w newz,d2
  1167.  sub.w oldz,d2
  1168.  jsr GetRand
  1169.  asr.w #4,d0
  1170.  muls d0,d1
  1171.  muls d0,d2
  1172.  swap d1
  1173.  swap d2
  1174.  add.w d1,newz
  1175.  sub.w d2,newx
  1176.  
  1177.  move.l p1_yoff,d1
  1178.  add.l #15*128,d1
  1179.  asr.l #7,d1
  1180.  move.w d1,d2
  1181.  muls d0,d2
  1182.  swap d2
  1183.  add.w d2,d1
  1184.  ext.l d1
  1185.  asl.l #7,d1
  1186.  move.l d1,newy
  1187.  move.w 4(a0),d1
  1188.  ext.l d1
  1189.  asl.l #7,d1
  1190.  move.l d1,oldy
  1191.  
  1192.  move.b ObjInTop(a0),StoodInTop
  1193.  
  1194.  st exitfirst
  1195.  move.w #0,extlen
  1196.  move.b #$ff,awayfromwall
  1197.  move.w #%0000010000000000,wallflags
  1198.  move.l #0,StepUpVal
  1199.  move.l #$1000000,StepDownVal
  1200.  move.l #0,thingheight
  1201.  move.l objroom,-(a7)
  1202.  movem.l d0-d7/a0-a6,-(a7)
  1203.  
  1204. .again:
  1205.  jsr MoveObject
  1206.  tst.b hitwall
  1207.  bne.s .nofurther
  1208.  move.w newx,d0
  1209.  sub.w oldx,d0
  1210.  add.w d0,oldx
  1211.  add.w d0,newx
  1212.  move.w newz,d0
  1213.  sub.w oldz,d0
  1214.  add.w d0,oldz
  1215.  add.w d0,newz
  1216.  move.l newy,d0
  1217.  sub.l oldy,d0
  1218.  add.l d0,oldy
  1219.  add.l d0,newy
  1220.  bra .again
  1221.  
  1222. .nofurther:
  1223.  
  1224.  move.l objroom,backroom
  1225.  
  1226.  movem.l (a7)+,d0-d7/a0-a6
  1227.  move.l (a7)+,objroom
  1228.  
  1229.  move.l PlayerShotData,a0
  1230.  move.w #19,d1
  1231. .findonefree2
  1232.  move.w 12(a0),d2
  1233.  blt.s .foundonefree2
  1234.  adda.w #64,a0
  1235.  dbra d1,.findonefree2
  1236.  
  1237.  move.w tsx,oldx
  1238.  move.w tsz,oldz
  1239.  move.w fsx,newx
  1240.  move.w fsz,newz
  1241.  
  1242.  rts
  1243.  
  1244. .foundonefree2:
  1245.  
  1246.  move.l ObjectPoints,a1
  1247.  move.w (a0),d2
  1248.  move.w newx,(a1,d2.w*8)
  1249.  move.w newz,4(a1,d2.w*8)
  1250.  move.b #1,shotstatus(a0)
  1251.  move.w #0,shotgrav(a0)
  1252.  move.b #0,shotsize(a0)
  1253.  move.b #0,shotanim(a0)
  1254.  
  1255.  move.l backroom,a1
  1256.  move.w (a1),12(a0)
  1257.  st worry(a0)
  1258.  move.l wallhitheight,d0
  1259.  move.l d0,accypos(a0)
  1260.  asr.l #7,d0
  1261.  move.w d0,4(a0)
  1262.  
  1263.  move.w tsx,oldx
  1264.  move.w tsz,oldz
  1265.  move.w fsx,newx
  1266.  move.w fsz,newz
  1267.  
  1268.  
  1269.  rts
  1270.  
  1271. futurex: dc.w 0
  1272. futurez: dc.w 0
  1273.  
  1274. FireAtPlayer1:
  1275.  
  1276.  move.l ObjectPoints,a1
  1277.  move.w (a0),d1
  1278.  lea (a1,d1.w*8),a1
  1279.  
  1280.  move.l NastyShotData,a5
  1281.  move.w #19,d1
  1282. .findonefree
  1283.  move.w 12(a5),d0
  1284.  blt.s .foundonefree
  1285.  adda.w #64,a5
  1286.  dbra d1,.findonefree
  1287.  
  1288.  bra .cantshoot
  1289.  
  1290. .foundonefree:
  1291.  
  1292.  move.b #2,16(a5)
  1293.  
  1294.  move.l #ObjRotated,a6
  1295.  move.w (a0),d0
  1296.  lea (a6,d0.w*8),a6
  1297.  
  1298.  move.l (a6),Noisex
  1299.  move.w #100,Noisevol
  1300.  move.b #1,chanpick
  1301.  clr.b notifplaying
  1302.  move.b SHOTTYPE,d0
  1303.  move.w #0,shotlife(a5)
  1304.  move.b d0,shotsize(a5)
  1305.  move.b ALIENECHO,Echo
  1306.  move.b SHOTPOWER,shotpower(a5)
  1307.  movem.l a5/a1/a0,-(a7)
  1308.  move.w (a0),IDNUM
  1309.  jsr MakeSomeNoise
  1310.  movem.l (a7)+,a5/a1/a0
  1311.  
  1312.  move.l ObjectPoints,a2
  1313.  move.w (a5),d1
  1314.  lea (a2,d1.w*8),a2
  1315.  move.w (a1),oldx
  1316.  move.w 4(a1),oldz
  1317.  move.w PLR1_xoff,newx
  1318.  move.w PLR1_zoff,newz
  1319.  
  1320.  jsr CalcDist
  1321.  move.w XDIFF1,d6
  1322.  muls distaway,d6
  1323.  divs SHOTSPEED,d6
  1324.  asr.w #4,d6
  1325.  add.w d6,newx
  1326.  move.w ZDIFF1,d6
  1327.  muls distaway,d6
  1328.  divs SHOTSPEED,d6
  1329.  asr.w #4,d6
  1330.  add.w d6,newz
  1331.  move.w newx,futurex
  1332.  move.w newz,futurez
  1333.  
  1334.  move.w SHOTSPEED,speed
  1335.  move.w #0,Range
  1336.  jsr HeadTowards
  1337.  
  1338.  move.w newx,d0
  1339.  sub.w oldx,d0
  1340.  move.w newz,d1
  1341.  sub.w oldz,d1
  1342.  move.w SHOTOFFMULT,d2
  1343.  beq.s .nooffset
  1344.  
  1345.  muls d2,d0
  1346.  muls d2,d1
  1347.  asr.l #8,d0
  1348.  asr.l #8,d1
  1349.  add.w d1,oldx
  1350.  sub.w d0,oldz
  1351.  move.w futurex,newx
  1352.  move.w futurez,newz
  1353.  jsr HeadTowards
  1354.  
  1355. .nooffset:
  1356.  
  1357.  move.w newx,d0
  1358.  move.w d0,(a2)
  1359.  sub.w oldx,d0
  1360.  move.w d0,shotxvel(a5)
  1361.  move.w newz,d0
  1362.  move.w d0,4(a2)
  1363.  sub.w oldz,d0
  1364.  move.w d0,shotzvel(a5)
  1365.  
  1366.  move.l #%110010,EnemyFlags(a5)
  1367.  move.w 12(a0),12(a5)
  1368.  move.w 4(a0),d0
  1369.  move.w d0,4(a5)
  1370.  ext.l d0
  1371.  asl.l #7,d0
  1372.  add.l SHOTYOFF,d0
  1373.  move.l d0,accypos(a5)
  1374.  move.b SHOTINTOP,ObjInTop(a5)
  1375.  move.l PLR1_Obj,a2
  1376.  move.w 4(a2),d1
  1377.  sub.w #20,d1
  1378.  ext.l d1
  1379.  asl.l #7,d1
  1380.  sub.l d0,d1
  1381.  add.l d1,d1
  1382.  move.w distaway,d0 
  1383.   
  1384.  move.w SHOTSHIFT,d2
  1385.  asr.w d2,d0
  1386.  tst.w d0
  1387.  bgt.s .okokokok
  1388.  moveq #1,d0
  1389. .okokokok
  1390.  
  1391.  divs d0,d1
  1392.  move.w d1,shotyvel(a5)
  1393.  st worry(a5)
  1394.  
  1395.  move.l GunData,a6
  1396.  moveq #0,d0
  1397.  move.b SHOTTYPE,d0 
  1398.  asl.w #5,d0
  1399.  add.w d0,a6
  1400.  move.w 16(a6),shotgrav(a5)
  1401.  move.w 18(a6),shotflags(a5)
  1402. ; move.w 20(a6),d0
  1403. ; add.w d0,shotyvel(a5)
  1404.  
  1405. .cantshoot
  1406.  rts
  1407.  
  1408.  
  1409. SHOOTPLAYER2
  1410.  
  1411.  move.w oldx,tsx
  1412.  move.w oldz,tsz
  1413.  move.w newx,fsx
  1414.  move.w oldx,fsz
  1415.  
  1416.  move.w p2_xoff,newx
  1417.  move.w p2_zoff,newz
  1418.  move.w (a1),oldx
  1419.  move.w 4(a1),oldz
  1420.  
  1421.  move.w newx,d1
  1422.  sub.w oldx,d1
  1423.  move.w newz,d2
  1424.  sub.w oldz,d2
  1425.  jsr GetRand
  1426.  asr.w #4,d0
  1427.  muls d0,d1
  1428.  muls d0,d2
  1429.  swap d1
  1430.  swap d2
  1431.  add.w d1,newz
  1432.  sub.w d2,newx
  1433.  
  1434.  move.l p2_yoff,d1
  1435.  add.l #15*128,d1
  1436.  asr.l #7,d1
  1437.  move.w d1,d2
  1438.  muls d0,d2
  1439.  swap d2
  1440.  add.w d2,d1
  1441.  ext.l d1
  1442.  asl.l #7,d1
  1443.  move.l d1,newy
  1444.  move.w 4(a0),d1
  1445.  ext.l d1
  1446.  asl.l #7,d1
  1447.  move.l d1,oldy
  1448.  move.b ObjInTop(a0),StoodInTop
  1449.  
  1450.  st exitfirst
  1451.  move.w #0,extlen
  1452.  move.b #$ff,awayfromwall
  1453.  move.w #%0000010000000000,wallflags
  1454.  move.l #0,StepUpVal
  1455.  move.l #$1000000,StepDownVal
  1456.  move.l #0,thingheight
  1457.  move.l objroom,-(a7)
  1458.  movem.l d0-d7/a0-a6,-(a7)
  1459.  
  1460. .again:
  1461.  jsr MoveObject
  1462.  tst.b hitwall
  1463.  bne.s .nofurther
  1464.  move.w newx,d0
  1465.  sub.w oldx,d0
  1466.  add.w d0,oldx
  1467.  add.w d0,newx
  1468.  move.w newz,d0
  1469.  sub.w oldz,d0
  1470.  add.w d0,oldz
  1471.  add.w d0,newz
  1472.  move.l newy,d0
  1473.  sub.l oldy,d0
  1474.  add.l d0,oldy
  1475.  add.l d0,newy
  1476.  bra .again
  1477.  
  1478. .nofurther:
  1479.  
  1480.  move.l objroom,backroom
  1481.  
  1482.  movem.l (a7)+,d0-d7/a0-a6
  1483.  move.l (a7)+,objroom
  1484.  
  1485.  move.l NastyShotData,a0
  1486.  move.w #19,d1
  1487. .findonefree2
  1488.  move.w 12(a0),d2
  1489.  blt.s .foundonefree2
  1490.  adda.w #64,a0
  1491.  dbra d1,.findonefree2
  1492.  
  1493.  move.w tsx,oldx
  1494.  move.w tsz,oldz
  1495.  move.w fsx,newx
  1496.  move.w fsz,oldx
  1497.  
  1498.  rts
  1499.  
  1500. .foundonefree2:
  1501.  
  1502.  move.l ObjectPoints,a1
  1503.  move.w (a0),d2
  1504.  move.w newx,(a1,d2.w*8)
  1505.  move.w newz,4(a1,d2.w*8)
  1506.  move.b #1,shotstatus(a0)
  1507.  move.w #0,shotgrav(a0)
  1508.  move.b #0,shotsize(a0)
  1509.  move.b #0,shotanim(a0)
  1510.  
  1511.  move.l backroom,a1
  1512.  move.w (a1),12(a0)
  1513.  st worry(a0)
  1514.  move.l wallhitheight,d0
  1515.  move.l d0,accypos(a0)
  1516.  asr.l #7,d0
  1517.  move.w d0,4(a0)
  1518.  
  1519.  move.w tsx,oldx
  1520.  move.w tsz,oldz
  1521.  move.w fsx,newx
  1522.  move.w fsz,oldx
  1523.  
  1524.  rts
  1525.  
  1526. FireAtPlayer2:
  1527.  move.l NastyShotData,a5
  1528.  move.w #19,d1
  1529. .findonefree
  1530.  move.w 12(a5),d0
  1531.  blt.s .foundonefree
  1532.  adda.w #64,a5
  1533.  dbra d1,.findonefree
  1534.  
  1535.  bra .cantshoot
  1536.  
  1537. .foundonefree:
  1538.  
  1539.  move.b #2,16(a5)
  1540.  
  1541.  move.l #ObjRotated,a6
  1542.  move.w (a0),d0
  1543.  lea (a6,d0.w*8),a6
  1544.  
  1545.  move.l (a6),Noisex
  1546.  move.w #100,Noisevol
  1547.  move.b #1,chanpick
  1548.  clr.b notifplaying
  1549.  move.b SHOTPOWER,d0
  1550.  move.w #0,shotlife(a5)
  1551.  move.b d0,shotsize(a5)
  1552.  move.b SHOTPOWER,shotpower(a5)
  1553.  movem.l a5/a1/a0,-(a7)
  1554.  move.w (a0),IDNUM
  1555.  move.b ALIENECHO,Echo
  1556.  jsr MakeSomeNoise
  1557.  movem.l (a7)+,a5/a1/a0
  1558.  
  1559.  move.l ObjectPoints,a2
  1560.  move.w (a5),d1
  1561.  lea (a2,d1.w*8),a2
  1562.  move.w (a1),oldx
  1563.  move.w 4(a1),oldz
  1564.  move.w PLR2_xoff,newx
  1565.  move.w PLR2_zoff,newz
  1566.  move.w SHOTSPEED,speed
  1567.  move.w #0,Range
  1568.  jsr HeadTowards
  1569.  
  1570.  move.w newx,d0
  1571.  sub.w oldx,d0
  1572.  move.w newz,d1
  1573.  sub.w oldz,d1
  1574.  move.w SHOTOFFMULT,d2
  1575.  beq.s .nooffset
  1576.  
  1577.  muls d2,d0
  1578.  muls d2,d1
  1579.  asr.l #8,d0
  1580.  asr.l #8,d1
  1581.  add.w d1,oldx
  1582.  sub.w d0,oldz
  1583.  move.w PLR2_xoff,newx
  1584.  move.w PLR2_zoff,newz
  1585.  jsr HeadTowards
  1586.  
  1587. .nooffset:
  1588.  
  1589.  
  1590.  move.w newx,d0
  1591.  move.w d0,(a2)
  1592.  sub.w oldx,d0
  1593.  move.w d0,shotxvel(a5)
  1594.  move.w newz,d0
  1595.  move.w d0,4(a2)
  1596.  sub.w oldz,d0
  1597.  move.w d0,shotzvel(a5)
  1598.  
  1599.  move.l #%110010,EnemyFlags(a5)
  1600.  move.w 12(a0),12(a5)
  1601.  move.w 4(a0),d0
  1602.  move.w d0,4(a5)
  1603.  ext.l d0
  1604.  asl.l #7,d0
  1605.  add.l SHOTYOFF,d0
  1606.  move.l d0,accypos(a5)
  1607.  move.b SHOTINTOP,ObjInTop(a5)
  1608.  move.l PLR2_Obj,a2
  1609.  move.w 4(a2),d1
  1610.  sub.w #20,d1
  1611.  ext.l d1
  1612.  asl.l #7,d1
  1613.  sub.l d0,d1
  1614.  add.l d1,d1
  1615.  move.w distaway,d0
  1616.  move.w SHOTSHIFT,d2
  1617.  asr.w d2,d0
  1618.  tst.w d0
  1619.  bgt.s .okokokok
  1620.  moveq #1,d0
  1621. .okokokok
  1622.  divs d0,d1
  1623.  move.w d1,shotyvel(a5)
  1624.  st worry(a5)
  1625.  move.w #0,shotgrav(a5)
  1626. .cantshoot
  1627.  rts
  1628.  
  1629. SHOTYOFF: dc.l 0
  1630. SHOTTYPE: dc.w 0
  1631. SHOTPOWER: dc.w 0
  1632. SHOTSPEED: dc.w 0
  1633. SHOTOFFMULT: dc.w 0
  1634. SHOTSHIFT: dc.w 0
  1635. SHOTINTOP: dc.w 0
  1636.  
  1637. backroom: dc.l 0